Agent 评估就绪清单 — 要点提炼

来源

核心理念

从最简单的 eval 开始,只在简单方法漏掉真实失败时才加复杂度。

几个端到端 eval 测试 Agent 是否完成核心任务,就能立即建立基线——即使架构还在变。

一、构建 Eval 之前

手动审查 20-50 条真实 trace

花 30 分钟读真实 Agent trace,比任何自动化系统都能更快发现失败模式。这是最高 ROI 的投入。

60-80% 的精力花在 Error Analysis 上

流程:收集失败 trace → 开放编码(不预设分类)→ 归类为失败分类法 → 迭代直到不再发现新类别。

失败根因分类:

根因 含义 修复方向
Prompt problem 指令不清晰导致误解 改 prompt
Tool design problem 工具接口让 Agent 容易犯错 重新设计参数、加示例、明确边界
Model limitation 指令清晰但模型不泛化 加示例、换架构、换模型
Data/infra issue 超时、API 畸形响应、缓存过期 先修管道再评模型

Witan Labs 修复一个 extraction bug 后 benchmark 从 50% 升到 73%。基础设施问题经常伪装成推理失败。

定义无歧义的成功标准

如果两个专家对 pass/fail 无法达成一致,说明任务定义需要细化。

分离 Capability Evals 和 Regression Evals

类型 回答的问题 通过率 用途
Capability "它能做什么?" 低,逐步爬坡 推动进步
Regression "它还能做吗?" ~100% 防止退化

没有分离会导致:要么只守不攻(停止改进),要么只攻不守(频繁回退)。

二、评估层级

层级 粒度 测什么 建议
Single-step (Run) 单个工具调用 选对工具了吗?API 调用合法吗? 架构稳定后再加
Full-turn (Trace) 完整一轮交互 最终输出 + 执行路径 + 状态变更 首选起点
Multi-turn (Thread) 多轮对话 上下文保持、跨轮一致性 trace-level 稳定后再加

Trace-level 的三个评估维度

  1. Final response — 输出是否正确有用
  2. Trajectory — 路径是否合理(不要求精确匹配,只要有效)
  3. State changes — 副作用是否正确(文件写入、数据库更新、日历事件创建等)

State change 评估常被忽略但至关重要。Agent 说 "Done!" 不代表事情真的做对了——要验证实际状态。

Multi-turn 实用技巧:N-1 Testing

取生产中真实对话的前 N-1 轮作为前缀,只让 Agent 生成最后一轮。避免全合成多轮对话的误差累积问题。

三、数据集构建

持续发现新 eval 的三个来源

  1. Dogfooding — 团队每天用自己的 Agent,每个错误变成一条 eval
  2. 外部 benchmark 挑选 — 从 Terminal Bench、BFCL 等挑选相关任务适配
  3. 手写行为测试 — 针对特定行为(如"是否并行调用工具""是否对模糊请求追问")

四、Grader 设计

按维度选择专门的 Grader

类型 适用场景 注意
Code-based 确定性检查、格式验证、工具调用验证 可能误杀合法但非预期的格式
LLM-as-judge 主观质量、开放式任务 需要和人类校准
Human 校准、边界案例 贵、慢、不可规模化

有客观正确答案时默认用 code-based。LLM-as-judge 判客观题不可靠,会引入不一致性。

Guardrails ≠ Evaluators

Guardrails Evaluators
时机 执行中,用户看到输出前 生成后,异步
速度 毫秒级 秒到分钟
用途 拦截危险/畸形输出 衡量质量、抓回退

关键原则

五、运行与迭代

六、生产就绪

CI/CD 集成流程

  1. 代码/prompt 变更触发 pipeline
  2. Offline eval 运行(code-based grader,便宜快速)
  3. 通过 → 部署到 preview
  4. Online eval 运行(LLM-as-judge,更贵更慢)
  5. 全部通过 → 推生产;失败 → 路由到标注队列 + 告警

飞轮

生产失败 → 回流到数据集 → 更新 error analysis → 改进 eval → 改进 Agent → 生产表现提升

这个持续改进的飞轮本身比任何具体的 eval 实现都重要。

关键动作